package logica;

import java.io.Serializable;

import javax.persistence.*;

import java.util.Calendar;
import java.util.Date;
import java.util.List;


/**
 * The persistent class for the ESTADIA database table.
 * 
 */
@Entity
@Table(name="ESTADIA")
@NamedQuery(name="Estadia.findAll", query="SELECT e FROM Estadia e")
public class Estadia implements Serializable {
	private static final long serialVersionUID = 1L;
	private int idEstadia;
	private int cantidadDias;
	private int descuento;
	private Calendar fechaEntrada;
	private Calendar fechaSalidaestimada;
	private Calendar fechaSalidareal;
	private Calendar horaSalida;
	private double precio;
	private List<Consumo> consumos;
	private Habitacion habitacion;
	private List<Permanece> permaneces;
	private List<Factura> facturas;

	public Estadia() {
	}


	@Id
	@SequenceGenerator(name="ESTADIA_IDESTADIA_GENERATOR", sequenceName="SECUENCIA")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ESTADIA_IDESTADIA_GENERATOR")
	@Column(name="ID_ESTADIA", unique=true, nullable=false, precision=38)
	public int getIdEstadia() {
		return this.idEstadia;
	}

	public void setIdEstadia(int idEstadia) {
		this.idEstadia = idEstadia;
	}


	@Column(name="CANTIDAD_DIAS", precision=38)
	public int getCantidadDias() {
		return this.cantidadDias;
	}

	public void setCantidadDias(int cantidadDias) {
		this.cantidadDias = cantidadDias;
	}


	@Column(precision=38)
	public int getDescuento() {
		return this.descuento;
	}

	public void setDescuento(int descuento) {
		this.descuento = descuento;
	}


	@Temporal(TemporalType.DATE)
	@Column(name="FECHA_ENTRADA", nullable=false)
	public Calendar getFechaEntrada() {
		return this.fechaEntrada;
	}

	public void setFechaEntrada(Calendar fechaEntrada) {
		this.fechaEntrada = fechaEntrada;
	}


	@Temporal(TemporalType.DATE)
	@Column(name="FECHA_SALIDAESTIMADA")
	public Calendar getFechaSalidaestimada() {
		return this.fechaSalidaestimada;
	}

	public void setFechaSalidaestimada(Calendar fechaSalidaestimada) {
		this.fechaSalidaestimada = fechaSalidaestimada;
	}


	@Temporal(TemporalType.DATE)
	@Column(name="FECHA_SALIDAREAL")
	public Calendar getFechaSalidareal() {
		return this.fechaSalidareal;
	}

	public void setFechaSalidareal(Calendar fechaSalidareal) {
		this.fechaSalidareal = fechaSalidareal;
	}


	@Temporal(TemporalType.DATE)
	@Column(name="HORA_SALIDA")
	public Calendar getHoraSalida() {
		return this.horaSalida;
	}

	public void setHoraSalida(Calendar horaSalida) {
		this.horaSalida = horaSalida;
	}


	@Column(nullable=false, precision=126)
	public double getPrecio() {
		return this.precio;
	}

	public void setPrecio(double precio) {
		this.precio = precio;
	}


	//bi-directional many-to-one association to Consumo
	@OneToMany(mappedBy="estadia")
	public List<Consumo> getConsumos() {
		return this.consumos;
	}

	public void setConsumos(List<Consumo> consumos) {
		this.consumos = consumos;
	}

	public Consumo addConsumo(Consumo consumo) {
		getConsumos().add(consumo);
		consumo.setEstadia(this);

		return consumo;
	}

	public Consumo removeConsumo(Consumo consumo) {
		getConsumos().remove(consumo);
		consumo.setEstadia(null);

		return consumo;
	}


	//bi-directional many-to-one association to Habitacion
	@ManyToOne
	@JoinColumn(name="NROHABITACION", nullable=false)
	public Habitacion getHabitacion() {
		return this.habitacion;
	}

	public void setHabitacion(Habitacion habitacion) {
		this.habitacion = habitacion;
	}


	//bi-directional many-to-one association to Permanece
	@OneToMany(mappedBy="estadia")
	public List<Permanece> getPermaneces() {
		return this.permaneces;
	}

	public void setPermaneces(List<Permanece> permaneces) {
		this.permaneces = permaneces;
	}

	public void addPermanece(Permanece permanece) {
		getPermaneces().add(permanece);
		permanece.setEstadia(this);

	}

	public Permanece removePermanece(Permanece permanece) {
		getPermaneces().remove(permanece);
		permanece.setEstadia(null);

		return permanece;
	}

	@OneToMany(mappedBy="estadia")
	public List<Factura> getFacturas() {
		return facturas;
	}


	public void setFacturas(List<Factura> facturas) {
		this.facturas = facturas;
	}
	public void addFactura(Factura factura) {
		getFacturas().add(factura);
		factura.setEstadia(this);

	}

	public void removeFactura(Factura factura) {
		getFacturas().remove(factura);
		factura.setEstadia(null);

	}
}